home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2004-12-21 | 33.0 KB | 1,034 lines
// SCRIPTING // Culturalia+IMDB (Batch) v1.0 (*************************************************** * Script merged by Jose Miguel Folgueira, based * * on a similar script merged by Antoine Potten * * * * Movie importation script for: * * Culturalia, http://www.culturalianet.com * * * * Original version made by David Arenillas * * New version made by Antoine Potten * * Contributors: * * Jose Miguel Folgueira * * RedDwarf * * Hades666 * * KaBeCi * * PolloPolea * * Moises DΘniz * * Val * * * * Thanks to Culturalia's webmaster for his help * * and for providing more direct access to his * * database * * * * Movie importation script for: * * IMDB (US), http://us.imdb.com * * * * (c) 2002-2004 Antoine Potten * * software@antp.be * * * * TransformTitle function from IMDB (US) Script * * (c) 2002-2004 Antoine Potten * * software@antp.be * * * * Contributors : * * Danny Falkov * * Kai Blankenhorn * * lboregard * * Ork <ork@everydayangels.net> * * Trekkie <Asimov@hotmail.com> * * Youri Heijnen * * * * For use with Ant Movie Catalog 3.4.x * * www.antp.be/software/moviecatalog * * * * This program is free software; you can * * redistribute it and/or modify it under the * * terms of the GNU General Public License as * * published by the Free Software Foundation; * * either version 2 of the License, or (at your * * option) any later version. * * * ***************************************************) program Culturalia_IMDb_Batch; const BaseURLCulturalia = 'http://www.culturalianet.com/bus/catalogo.php'; UseLongestDescIMDB = False; // If set to False shortest description available will be imported, faster since taken from main page // Set the following constants to True to import field, or False to skip field (fiels to import from IMDB). By default, only the fields not available at Culturalia are set to True. // Pon las siguientes constantes a True para importar campo o False para no hacerlo (campos a importar de IMDB). Por defecto, s≤lo los campos no disponibles en Culturalia estßn a True. ImportActors = False; ImportCategory = False; ImportComments = False; ImportCountry = False; ImportDescription = False; ImportDirector = False; ImportLength = True; ImportLanguage = False; ImportOriginalTitle = False; ImportTranslatedTitle = False; LeaveOriginalTitle = True; // True will get Translated Title, yet Original Title field will remain same ImportPicture = False; ImportLargePicture = False; // If set to False small pic will be imported ImportRating = True; ImportURL = False; ImportYear = False; TitleMixedCase = False; // If true, each letter of each word of title begins with Uppercase. If false, the script transforms the titles in lowercase except first word ExternalPictures = False; { True: Pictures will be stored as external files in the folder of the catalog False: Pictures will be stored inside the catalog (only for .amc files) } ManualPictureSelect = False; { True: If no Title Match found a picture selection window appears False: Revert to IMDB picture } // Donde vamos a buscar en el caso de no haber introducido ni el tφtulo original ni el traducido en los campos correspondientes, sino en la ventana que // se abre y nos lo solicita. // 1-Titulo traducido, 2-Titulo original, 3-General // What type of search in case we don't write the original title nor traslated one in the corresponding fields, we do it in the input box. // 1-Translated title, 2-Original Title, 3-General defdonde='1'; var MovieName, Titulo: string; MovieURL: string; tmp: string; donde: string; Articles: array of string; Index: Integer; function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(Pattern, List.GetString(i)) <> 0 then begin result := i; Break; end; end; procedure AnalyzePageIMDB(Address: string); var Page: TStringList; LineNr: Integer; MovieURL: string; begin Page := TStringList.Create; Page.Text := GetPage(Address); if pos('<title>IMDb', Page.Text) = 0 then begin AnalyzeMoviePageIMDB(Page) end else begin MovieURL := AddMoviesTitles(Page, '<b>Exact Matches</b>'); if MovieURL = '' then MovieURL := AddMoviesTitles(Page, '<b>Partial Matches</b>'); if MovieURL = '' then MovieURL := AddMoviesTitles(Page, '<b>Approximate Matches</b>'); if MovieURL <> '' then AnalyzePageIMDB(MovieURL); end; Page.Free; end; function FindValue(BeginTag, EndTag: string; Page: TStringList; var LineNr: Integer; var Line: string): string; var BeginPos, EndPos: Integer; Value: string; begin Result := ''; Value := ''; BeginPos := Pos(BeginTag, Line); if BeginPos > 0 then begin BeginPos := BeginPos + Length(BeginTag); if BeginTag = EndTag then begin Delete(Line,1,BeginPos-1); BeginPos := 1; end; EndPos := pos(EndTag, Line); while ((EndPos = 0) and (LineNr < Page.Count-1 )) do begin Value := Value + copy(Line, BeginPos, Length(Line) - BeginPos); // Next Line BeginPos := 1; LineNr := LineNr + 1; Line := Page.GetString(LineNr); if Value = '' then Exit; EndPos := Pos(EndTag, Line); end; Value := Value + copy(Line, BeginPos, EndPos - BeginPos); end; Result := Value; end; procedure AnalyzeMoviePageIMDB(Page: TStringList); var Line, Value, Value2, FullValue, OldOriginalTitle: string; LineNr, Desc, i: Integer; BeginPos, EndPos: Integer; OldTitleParts, AllTitles: TStringList; LongDescr: Boolean; begin LongDescr := UseLongestDescIMDB; if (LongDescr) and (Pos('<a href="plotsummary">', Page.Text) = 0) then LongDescr := False; MovieURL := 'http://imdb.com/title/tt' + Copy(Page.Text, Pos('?pending&add=', Page.Text) + 17, 7); // URL if ImportURL then SetField(fieldURL, MovieURL); AllTitles := TStringList.Create; // Original Title & Year if (ImportOriginalTitle) or (ImportYear) then begin LineNr := FindLine('<title>', Page, 0); Line := Page.GetString(LineNr); if LineNr > -1 then begin BeginPos := pos('<title>', Line); if BeginPos > 0 then BeginPos := BeginPos + 7; EndPos := pos('(', Line); if EndPos = 0 then EndPos := Length(Line); Value := copy(Line, BeginPos, EndPos - BeginPos - 1); HTMLDecode(Value); if ImportOriginalTitle then OldOriginalTitle := GetField(fieldOriginalTitle); if (ImportTranslatedTitle) and not (LeaveOriginalTitle) then SetField(fieldOriginalTitle, Value); BeginPos := pos('(', Line) + 1; if BeginPos > 0 then begin EndPos := Pos('/I', Line); if EndPos < BeginPos then EndPos := pos(')', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); if ImportYear then SetField(fieldYear, Value); end; end; end; // Translated Title if ImportTranslatedTitle then begin OldTitleParts := TStringList.Create; // Tokenize OldOriginalTitle while removing certain chars/common words ("the", "of") Value := AnsiUpperCase(OldOriginalTitle); Value := StringReplace(StringReplace(Value, ',', ' '), ':', ' '); Value := StringReplace(StringReplace(Value, '(', ' '), ')', ' '); Value := StringReplace(StringReplace(Value, 'OF', ' '), 'THE', ' '); repeat Value := StringReplace(Value, ' ', ' '); until Pos(' ', Value) = 0; Value := StringReplace(Trim(Value), ' ', ','); // Value now contains the original title (comma-separated) that was filled in before running the script Value2 := ''; for i := 1 to Length(Value) do begin if Pos(',', Copy(Value, i, 1)) = 0 then Value2 := Value2 + Copy(Value, i, 1); if (Pos(',', Copy(Value, i, 1)) = 1) or (i = Length(Value)) then begin OldTitleParts.Add(Value2); // put each comma-separated value from Value into a separate string in TitleParts Value2 := ''; end; end; for i := 0 to OldTitleParts.Count - 1 do // Begin comparing title parts (from the title originally filled in by moviedb owner) with // the 'true' Original Title (extracted from IMDb) to see if it's a foreign title and needs a Translated Title begin if Pos(OldTitleParts.GetString(i), AnsiUpperCase(GetField(fieldOriginalTitle))) <= 0 then begin // no match, must be a foreign title LineNr := FindLine('Also Known As', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); if Pos('Also Known As', Line) > 0 then begin BeginPos := Pos('Also Known As', Line) + 26; Value := Copy(Line, BeginPos, Length(Line) - BeginPos - 4); Value := StringReplace(Value, '<br>', '/ '); HTMLDecode(Value); SetField(fieldTranslatedTitle, Trim(Value)); end; end; Break; end; end; OldTitleParts.Free; end; // Rating if ImportRating then begin LineNr := FindLine('User Rating:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr + 4); if Pos('/10', Line) > 0 then begin BeginPos := pos('<b>', Line) + 3; Value := IntToStr(Round(StrToInt(StrGet(Line, BeginPos), 0) + (StrToInt(StrGet(Line, BeginPos + 2), 0) / 10))); SetField(fieldRating, Value); end; end; end; // Language LineNr := FindLine('Language:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr + 1); BeginPos := pos('/">', Line) + 3; EndPos := pos('</a>', Line); if EndPos = 0 then EndPos := Length(Line); Value := copy(Line, BeginPos, EndPos - BeginPos); if ImportLanguage then SetField(fieldLanguages, Value); end; if ImportPicture then GetMoviePicture(Value, Page, AllTitles); AllTitles.Free; // Director if ImportDirector then begin LineNr := FindLine('Directed by', Page, 0); if LineNr > -1 then begin FullValue := ''; Line := Page.GetString(LineNr + 1); repeat BeginPos := pos('">', Line) + 2; EndPos := pos('</a>', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); if (Value <> '(more)') and (Value <> '') then begin if FullValue <> '' then FullValue := FullValue + ', '; FullValue := FullValue + Value; end; Delete(Line, 1, EndPos); until Pos('</a>', Line) = 0; HTMLDecode(FullValue); SetField(fieldDirector, FullValue); end; end; // Actors if ImportActors then begin LineNr := FindLine('ast overview', Page, 0); if LineNr = -1 then LineNr := FindLine('redited cast', Page, 0); if LineNr > -1 then begin FullValue := ''; Line := Page.GetString(LineNr); repeat BeginPos := Pos('<td valign="top">', Line); if BeginPos > 0 then begin Delete(Line, 1, BeginPos); Line := copy(Line, 25, Length(Line)); BeginPos := pos('">', Line) + 2; EndPos := pos('</a>', Line); if EndPos = 0 then EndPos := Pos('</td>', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); if (Value <> '(more)') and (Value <> '') then begin BeginPos := pos('.... </td><td valign="top">', Line); if BeginPos > 0 then begin EndPos := pos('</td></tr>', Line); BeginPos := BeginPos + 27; Value2 := copy(Line, BeginPos, EndPos - BeginPos); if Value2 <> '' then begin Value := Value + ' (as ' + Value2 + ')'; end; end; if FullValue <> '' then FullValue := FullValue + ', '; FullValue := FullValue + Value; end; EndPos := Pos('</td></tr>', Line); Delete(Line, 1, EndPos); end else begin Line := ''; end; until Line = ''; HTMLDecode(FullValue); SetField(fieldActors, FullValue); end; end; // Country if ImportCountry then begin LineNr := FindLine('Country:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr + 1); BeginPos := pos('/">', Line) + 3; EndPos := pos('</a>', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); HTMLDecode(Value); SetField(fieldCountry, Value); end; end; // Category if ImportCategory then begin LineNr := FindLine('Genre:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr + 1); BeginPos := pos('/">', Line) + 3; EndPos := pos('</a>', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); HTMLDecode(Value); SetField(fieldCategory, Value); end; end; //Description if ImportDescription then begin LineNr := FindLine('Plot Summary:', Page, 0); if LineNr < 1 then LineNr := FindLine('Plot Outline:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('</b>', Line) + 5; EndPos := pos('<a href="/rg/', Line); if EndPos < 1 then begin Line := Line + Page.GetString(LineNr+1); EndPos := pos('<a href="/rg/', Line); if EndPos < 1 then EndPos := pos('<br><br>', Line); if EndPos < 1 then EndPos := Length(Line); end; Value := copy(Line, BeginPos, EndPos - BeginPos); HTMLDecode(Value); HTMLRemoveTags(Value); if UseLongestDescIMDB then SetField(fieldDescription, GetDescriptions(MovieURL + 'plotsummary')) else SetField(fieldDescription, Value); end; end; // Comments if ImportComments then begin LineNr := FindLine('<b>Summary:</b>', Page, 0); if LineNr > -1 then begin Value := ''; repeat LineNr := LineNr + 1; Line := Page.GetString(LineNr); EndPos := Pos('</blockquote>', Line); if EndPos = 0 then EndPos := Length(Line) else EndPos := EndPos - 1; Value := Value + Copy(Line, 1, EndPos) + ' '; until Pos('</blockquote>', Line) > 0; HTMLDecode(Value); Value := StringReplace(Value, '<br>', #13#10); Value := StringReplace(Value, #13#10+' ', #13#10); SetField(fieldComments, Value); end; end; // Length if ImportLength then begin LineNr := FindLine('Runtime:', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr + 1); EndPos := pos(' min', Line); if EndPos = 0 then EndPos := pos(' /', Line); if EndPos = 0 then EndPos := Length(Line); if Pos(':', Line) < EndPos then BeginPos := Pos(':', Line) + 1 else BeginPos := 1; Value := copy(Line, BeginPos, EndPos - BeginPos); SetField(fieldLength, Value); end; end; DisplayResults; end; procedure GetMoviePicture(Language: string; Page, AllTitles: TStringList); var Line, Value, Value2, Aka, PictureAddress: string; AmazonPage: TStringList; FoundOnAmazon, PickTreeSelected, PictureAvailable: Boolean; TitleRef, ImgRef, NoImage: string; LineNr, BeginPos, EndPos, PickTreeCount, ParagraphIndex, Index, TitleLine, LastMatch: Integer; begin FoundOnAmazon := False; if ImportLargePicture then begin // Find Alternate Titles for Movies which are not in English Aka := ''; if Language <> 'English' Then begin LineNr:= FindLine('Also Known As',Page,0); EndPos:=0; if LineNr > -1 then begin Line := Page.GetString(LineNr); repeat Aka:=FindValue('<br>','<br>',Page,LineNr,Line); if Aka <> '' then begin BeginPos:=1; EndPos:=Pos('(',Line); if EndPos = 0 then EndPos := Length(Aka); Value := copy(Aka, BeginPos, EndPos - BeginPos - 1); Value:=TransFormIMDBTitle(Value); AllTitles.Add(Value); end; until (Pos('</td>', Line) > 0) or (Pos('Runtime', Line) > 0) or (Pos('MPAA', Line) > 0 ) or (Pos('Country', Line) > 0) or (Pos('Certification', Line) > 0); end; end; TitleRef:='dvd>'; ImgRef:='dvd><img'; NoImage:='/icons/dvd-no-image.gif'; LineNr := FindLine('title="DVD available at Amazon.com"', Page, 0); if LineNr = -1 then begin LineNr := FindLine('title="VHS available at Amazon.com"', Page, 0); if LineNr > -1 then begin TitleRef:='video>'; ImgRef:='video><img'; NoImage:='/icons/video-no-image.gif'; end; end; if LineNr > -1 then begin Line := Page.GetString(LineNr); if(TitleRef='dvd>') then begin EndPos := pos('title="DVD', Line); BeginPos := pos('title="VHS', Line); while (BeginPos > 0) and (BeginPos<EndPos) do begin Delete(Line, 1, BeginPos+1); BeginPos := pos('title="VHS', Line); end; end; BeginPos := Pos('href="', Line) + 5; Delete(Line, 1, BeginPos); EndPos := Pos('"', Line); Value := Copy(Line, 1, EndPos - 1); AmazonPage := TStringList.Create; AmazonPage.Text := GetPage('http://us.imdb.com' + Value); // Original Title Value2 := AllTitles.GetString(0); Value2 := TransFormIMDBTitle(Value2); PickTreeClear; PickTreeCount := 0; PickTreeAdd('Available Titles for matching a picture to: ' + Value2, ''); ParagraphIndex := 1; LineNr := 0; LastMatch := -1; TitleLine := -1; repeat LineNr := FindLine('<b>'+IntToStr(ParagraphIndex)+'.', AmazonPage, LineNr); if LineNr > -1 then begin TitleLine:=LineNr; Value:=''; PictureAvailable:=False; repeat TitleLine:=TitleLine +1; Line:= AmazonPage.GetString(TitleLine); BeginPos:=0; if Pos(TitleRef,Line) > 0 then begin if Pos(ImgRef,Line) = 0 then begin for Index:=0 to AllTitles.Count -1 do begin Value2:=AllTitles.GetString(Index); BeginPos:=Pos(Value2,Line); if BeginPos > 0 then Break; end; // Match not found if BeginPos = 0 then begin BeginPos:=Pos(TitleRef,Line)+Length(TitleRef); EndPos:=Pos('</a>',Line); Value:=Copy(Line,BeginPos,EndPos-BeginPos); end; end else begin PictureAvailable:=(Pos(NoImage,Line) = 0); PictureAddress:=IntToStr(TitleLine); end; end; if BeginPos > 0 then Break; until (Pos('</table>',Line ) > 0); // Try to Find a Title Match if Pos(Value2,Line) > 0 then begin // Compare Current Title to Original BeginPos := Pos(TitleRef, Line) + Length(TitleRef) -1; Delete(Line, 1, BeginPos); EndPos:= Pos('(',Line); if EndPos = 0 Then EndPos := Pos('</a>', Line); Value := Copy(Line, 1, EndPos - 1); Value:= Trim(Value); if Value = Value2 then begin if PictureAvailable then LastMatch:=LineNr; //Break end; end; if PictureAvailable then begin PickTreeAdd(Value,PictureAddress); PickTreeCount:=PickTreeCount+1; end; end; ParagraphIndex:=ParagraphIndex+1; until (LineNr = -1); LineNr:=LastMatch; if (LineNr = -1) then begin // Handle Amazon Page Redirection(s) LineNr:= FindLine('You clicked on this item',AmazonPage,0); if (LineNr = -1) then LineNr:=FindLine('Customers who bought',AmazonPage,0); // Display the Picture Selection Window if (LineNr = -1) and ManualPictureSelect and (PickTreeCount > 0) then begin PickTreeSelected:=PickTreeExec(PictureAddress); if PickTreeSelected then LineNr:=StrToInt(PictureAddress,0); end; if (LineNr > -1 ) then begin LineNr := FindLine('src="http://images.amazon.com/images/P/',AmazonPage, LineNr); if not PickTreeSelected then TitleLine:= FindLine('/exec/obidos/ASIN/',AmazonPage, 0); if (LineNr > TitleLine) then LineNr:=-1; if LineNr > -1 then begin Line := AmazonPage.GetString(LineNr); BeginPos := Pos('src="http://images.amazon.com/images/P/', Line) + 4; Delete(Line, 1, BeginPos); EndPos := Pos('"', Line); Value := Copy(Line, 1, EndPos - 1); Value := StringReplace(Value, 'TZZZZZZZ', 'LZZZZZZZ'); Value := StringReplace(Value, 'THUMBZZZ', 'LZZZZZZZ'); GetPicture(Value, ExternalPictures); FoundOnAmazon := True; end; end; end else begin LineNr := FindLine('http://images.amazon.com/images/P/', AmazonPage, LineNr); if LineNr < TitleLine then begin Line := AmazonPage.GetString(LineNr); BeginPos := Pos('src="', Line) + 4; Delete(Line, 1, BeginPos); EndPos := Pos('"', Line); Value := Copy(Line, 1, EndPos - 1); Value := StringReplace(Value, 'THUMBZZZ', 'LZZZZZZZ'); GetPicture(Value, ExternalPictures); FoundOnAmazon := True; end; end; AmazonPage.Free; end; end; // if ImportLargePicture if not FoundOnAmazon then begin { not found on Amazon, so taking what's available directly on IMDB. } LineNr := FindLine('<img border="0" alt="cover"', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('src="', Line) + 4; Delete(Line, 1, BeginPos); EndPos := pos('"', Line); Value := copy(Line, 1, EndPos - 1); GetPicture(Value, ExternalPictures); end; end; end; function TransformTitle(Title: string): string; var BeginPos, EndPos: Integer; Value: string; Words: array of string; Articles: array of string; Replace,Original: string; Index, CommaCount: Integer; Begin // Original Title Result:=Title; Setarraylength(Words,11); Words[0]:=' In '; Words[1]:=' On '; Words[2]:=' Of '; Words[3]:=' As '; Words[4]:=' The '; Words[5]:=' At '; Words[6]:=' And A '; Words[7]:=' And '; Words[8]:=' An '; Words[9]:=' To '; Words[10]:=' For '; SetArrayLength(Articles,35); Articles[0]:=' The'; Articles[1]:=' a'; Articles[2]:=' An'; Articles[3]:=' Le'; Articles[4]:=' L'''; Articles[5]:=' Les'; Articles[6]:=' Der'; Articles[7]:=' Das'; Articles[8]:=' Die'; Articles[9]:=' Des'; Articles[10]:=' Dem'; Articles[11]:=' Den'; Articles[12]:=' Ein'; Articles[13]:=' Eine'; Articles[14]:=' Einen'; Articles[15]:=' Einer'; Articles[16]:=' Eines'; Articles[17]:=' Einem'; Articles[18]:=' Il'; Articles[19]:=' Lo'; Articles[20]:=' La'; Articles[21]:=' I'; Articles[22]:=' Gli'; Articles[23]:=' Le'; Articles[24]:=' Uno'; Articles[25]:=' Una'; Articles[26]:=' Un'''; Articles[27]:=' O'; Articles[28]:=' Os'; Articles[29]:=' As'; Articles[30]:=' El'; Articles[31]:=' Los'; Articles[32]:=' Las'; Articles[33]:=' Unos'; Articles[34]:=' Unas'; // Count the Comma in The Title CommaCount := 0; EndPos := 0; Value := Title; repeat BeginPos := Pos(',', Value); if BeginPos > 0 then begin Delete(Value, 1, BeginPos); CommaCount := CommaCount + 1; EndPos := EndPos + BeginPos; end; until( Pos(',',Value) = 0); // Compare the Article to a list of known ones for Index := 0 to 34 do begin if Pos(Articles[Index], Value) <> 0 then begin CommaCount := 1; BeginPos := EndPos; Break; end; end; if (BeginPos > 0) and (CommaCount = 1) then begin Value := Copy(Title, BeginPos + 1, Length(Title)); Value := Trim(Value); Result := Value + ' ' + Copy(Title, 1, BeginPos - 1); end; BeginPos := Pos(': ', Result); if BeginPos > 0 then Result := StringReplace(Result, ': ', ' - '); Result := AnsiMixedCase(Result, ' '); for Index := 0 to 10 do begin if Pos(Words[Index],Result) <> 0 then begin Original := Words[Index]; Replace := AnsiLowerCase(Original); Result := StringReplace(Result, Original, Replace); end; end; Result := StringReplace(Result, ' - the ', ' - The '); Result := Trim(Result); end; function GetDescriptions(Address: string): string; var Line, Value: string; LineNr: Integer; BeginPos, EndPos,Longest: Integer; Page: TStringList; begin Result := ''; Longest := 0; Page := TStringList.Create; Page.Text := GetPage(Address); LineNr := FindLine('<p class="plotpar">', Page, 0); while LineNr > -1 do begin Value := ''; repeat Line := Page.GetString(LineNr); BeginPos := pos('"plotpar">', Line); if BeginPos > 0 then BeginPos := BeginPos + 10 else BeginPos := 1; EndPos := pos('</p>', Line); if EndPos < 1 then EndPos := Length(Line) + 1; if Value <> '' then Value := Value + ' '; Value := Value + copy(Line, BeginPos, EndPos - BeginPos); LineNr := LineNr + 1; until (pos('</p>', Line) > 0) or (LineNr = Page.Count); HTMLDecode(Value); HTMLRemoveTags(Value); PickListAdd(Value); if Length(Value) > Longest then begin Result := Value; Longest := Length(Value); end; LineNr := FindLine('<p class="plotpar">', Page, LineNr); end; Page.Free; end; function AddMoviesTitles(Page: TStringList; Tag: string): string; var Line: string; LineNr: Integer; StartPos: Integer; begin Result := ''; LineNr := FindLine(tag, Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); HTMLRemoveTags(Line); PickTreeAdd(Trim(Line), ''); LineNr := LineNr + 5; Line := Page.GetString(LineNr); StartPos := pos('href="', Line) + 5; Delete(Line, 1, StartPos); Result := Copy(Line, 1, pos('">', Line) - 1); end; end; procedure AnalyzePageCulturalia(Address: string); var Page: TStringList; LineNr: Integer; Code: string; TitleFound: Boolean; begin TitleFound := False; Page := TStringList.Create; Page.Text := GetPage(Address); LineNr := 1; Page.Text := StringReplace(Page.Text, '<br>', #13#10); if Pos('No se ha encontrado ning·n artφculo por tφtulo', Page.Text) = 0 then begin TitleFound := True; Code := GetValueAfter(Page.GetString(LineNr), 'Codigo = '); Address := (BaseURLCulturalia + '?catalogo=1&codigo=' + Code); end; if TitleFound then AnalyzeMoviePageCulturalia(Address); Page.Free; end; procedure AnalyzeMoviePageCulturalia(Address: string); var Page: TStringList; Comments: string; strTitle: string; strSinopsis: string; Line: string; LineNr: Integer; tmp: string; begin Page := TStringList.Create; Page.Text := StringReplace(GetPage(Address), '<br><br>', #13#10); Page.Text := StringReplace(Page.Text, '<br>', #13#10); strTitle := GetValueAfter(Page.GetString(1), 'Titulo = '); if copy(strTitle, Length(strTitle), Length(strTitle)) = '.' then begin tmp := Copy(strTitle, 1, Length(strTitle) -1); end else begin tmp := strTitle; end; SetField(fieldTranslatedTitle, TransformTitle(tmp)); tmp := GetValueAfter(Page.GetString(2), 'Titulo original = '); SetField(fieldOriginalTitle, TransformTitle(tmp)); SetField(fieldYear, GetValueAfter(Page.GetString(3), 'A±o = ')); SetField(fieldCategory, GetValueAfter(Page.GetString(4), 'Genero = ')); SetField(fieldCountry, GetValueAfter(Page.GetString(5), 'Nacion = ')); SetField(fieldDirector, GetValueAfter(Page.GetString(6), 'Director = ')); SetField(fieldActors, GetValueAfter(Page.GetString(7), 'Actores = ')); SetField(fieldProducer, GetValueAfter(Page.GetString(8), 'Productor = ')); Comments := 'Gui≤n: ' + GetValueAfter(Page.GetString(9), 'Guion = '); Comments := Comments + #13#10 + 'Fotografφa: ' + GetValueAfter(Page.GetString(10), 'Fotografia = '); Comments := Comments + #13#10 + 'M·sica: ' + GetValueAfter(Page.GetString(11), 'Musica = '); SetField(fieldComments, Comments); LineNr := FindLine('Sinopsis = ', Page, 0); Line := Page.GetString(LineNr); strSinopsis := GetValueAfter(Line, 'Sinopsis = '); LineNr := LineNr + 1; Line := Page.GetString(LineNr); while pos('URL = ', Line) = 0 do begin strSinopsis := strSinopsis + #13#10 + Line; LineNr := LineNr + 1; Line := Page.GetString(LineNr); end HTMLRemoveTags(strSinopsis); SetField(fieldDescription, StringReplace(StringReplace(strSinopsis, '"', '"'), '"', '"')); LineNr := FindLine('URL = ', Page, 0); if LineNr <> -1 then SetField(fieldURL, GetValueAfter(Page.GetString(LineNr), 'URL = ')); LineNr := FindLine('Imagen = ', Page, 0); if LineNr <> -1 then GetPicture(GetValueAfter(Page.GetString(LineNr), 'Imagen = '), ExternalPictures); Page.Free; end; function GetValueAfter(Line, Identifier: string): string; begin if Pos(Identifier, Line) = 1 then Result := Copy(Line, Length(Identifier)+1, Length(Line)) else Result := ''; end; begin SetArrayLength(Articles,11); Articles[0]:='Lo '; Articles[1]:='La '; Articles[2]:='Le '; Articles[3]:='Uno '; Articles[4]:='Una '; Articles[5]:='Un '; Articles[6]:='El '; Articles[7]:='Los '; Articles[8]:='Las '; Articles[9]:='Unos '; Articles[10]:='Unas '; if CheckVersion(3,4,0) then begin MovieName := GetField(fieldOriginalTitle); donde := '&donde=2'; if MovieName = '' then begin MovieName := GetField (fieldTranslatedTitle); donde := '&donde=1'; end if MovieName = '' then begin Input('Importar de Culturalia', 'Introduce el Titulo de la Pelicula:', MovieName); donde := '&donde=' + defdonde; end if MovieName <> '' then begin // Eliminate spanish article if exists for Index := 0 to 10 do begin if Pos(Articles[Index], MovieName) <> 0 then MovieName := copy(MovieName, length(Articles[Index]), length(MovieName)); end; // Eliminate point(s) at final of MovieName before search tmp := MovieName; if Copy(tmp, Length(tmp), Length(tmp)) = '.' then MovieName := Copy(tmp, 1, Length(tmp) -1); AnalyzePageCulturalia(BaseURLCulturalia + '?catalogo=1&texto=' + UrlEncode(MovieName) + donde); AnalyzePageIMDB('http://us.imdb.com/Tsearch?title='+UrlEncode(GetField(fieldOriginalTitle))); end; end else ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.0)'); end.